BI - Report Server - Parâmetros do Relatório

Nota Inicial

Se você já criou um relatório no Report Server já deve ter ficado em dúvida sobre a utilização correta dos parâmetros disponíveis para os parâmetros do Report Server.

Como o report server tem uma interação muito fraca com o usuário, comparado com a web convencional, tentaram colocar 'características' nesses parâmetros de maneira a tornar praticamente desnecessária essa 'interação' mais aprofundada com o usuário. Cobriram o básico, fundamental, mas, com certeza, não tudo.

Você pode alterar as propriedades dos parâmetros do relatório usando a caixa de diálogo 'Report Data', clicando com o botão direito do mouse e selecionando 'Parameter Properties'.

Abas à esquerda

A esquerda da caixa temos a seleção do grupo de parâmetros. Eles se dividem em : 1-'General'', 2-'Available Values', 3-'Default Values', 4-'Advanced'. Elas separam os grupos de parâmetros de acordo com suas finalidades.

A tabela a seguir resume as propriedades que você pode definir para cada parâmetro:

A aba 'General' seleciona as características mais básicas dos parâmetros tais como ele será visualizado pelo usuário, seu tipo, se será visivel ou não no relatório.

Aba 'General' - Propriedade: name

Dá um nome ao parâmetro. Para facilitar deve ter alguma indicação sobre sua finalidade. Por exemplo: DataInicial

Cuidado que o Report Server diferencia maiúsculas de minúsculas no nome do parâmetro.

O nome deve começar com uma letra e pode ter letras, números, um sublinhado (_).
O nome não pode ter espaços.

Para parâmetros gerados automaticamente, o nome corresponde ao parâmetro na consulta do conjunto de dados.
Por padrão, os parâmetros criados manualmente são semelhantes a ReportParameter1.

Nome é como o Report Server reconhece / identifica o parâmetro.

Aba 'General' - Propriedade: Prompt

Prompt é o texto que aparece ao lado do parâmetro da 'caixa' do parâmetro para auxiliar o usuário no preenchimento do parâmetro. Se fosse só uma caixa você ficaria na dúvida sobre o que deveria escrever nela mas se à sua esquerda tem um texto escrito 'Digite aqui a data inicial' você não terá dúvidas sobre o que digitar. Portanto no nome do parâmetro você coloca 'DataInicial' mas no prompt você pode digitar : 'Digite a data inicial do relatório:'

Aba 'General' - Propriedade: Data type

O parâmetro de relatório deve ter um tipo definido como uma variável do SQL Server, data, integer, etc .Deve ser um dos seguintes tipos de dados:

Integer - O usuário deve digitar valores numéricos em uma caixa de texto.

Text - O usuário deve digitar um texto qualquer, como um nome por exemplo, em uma caixa de texto.

Boolean - Quando o parâmetro deve ter um valor Verdadeiro ou Falso em um botão de opção.

Date/Time - Quando o usuário deve escolher uma data para atuar como filtro do relatório. É exibido um elegante 'controle de calendário' que parece um calendário real e o usuário pode escolher uma data ou navegar no calendário até a data desejada.

Float - Quando o usuário deve digitar uma quantia monetária ou um número fracionário em uma caixa de texto.

Aba 'General' - Propriedade do conjunto de dados do parâmetro

Permite definir uma certa 'tolerância' na seleção do dado, como se deve aceitar que o valor do parâmetro seja nulo, se o operador pode escolher múltiplos parâmetros.

1-'Allow Blank Value' - Habilita que o valor selecionado para o relatório possa ser em branco. Note que isto permite que o usuário sequer selecione o parâmetro e na visualização do relatório será passado o valor do parâmetro em branco. Sendo assim se sua pesquisa usa o parâmetro você deve prepará-la para receber esse tipo de valor. Selecione esta opção quando a seleção do parâmetro for opcional pelo usuário. Normalmente seu valor será uma string vazia ou em branco. Note que essa propriedade não estiver setada a escolha dos parâmetros é obrigatória para o usuário. Se ele esquecer e clicar no botão 'Visualizar Relatório' receberá a mensagem 'O parametro x foi deixado em branco, por favor defina seu valor'.

Se você especificar uma lista de valores válidos para um parâmetro e desejar que um valor em branco seja um dos valores válidos, deverá incluí-lo como um dos valores especificados. A seleção dessa opção não inclui automaticamente um espaço em branco para os valores disponíveis.

2-'Allow Null Value' - Habilita que o usuário possa escolher um valor nulo para o parâmetro. Note que se a pesquisa retornar um valor nulo para preenchimento do parâmetro mas esta opção não for habilitada o usuário não poderá escolher o valor nulo como opção para o relatório. Novamente você deve preparar sua pesquisa para este tipo de parâmetro. É muito usada para inibir o parâmetro como filtro e selecionar todos elementos da pesquisa.

Valores nulos não são permitidos. Quando esta opção é selecionada, as caixas de seleção são adicionadas à lista de valores disponíveis em uma lista suspensa de parâmetros. A parte superior da lista inclui uma caixa de seleção para selecionar tudo. Os usuários podem verificar os valores que desejam.

3-'Allow multiple Values' - Habilita a seleção de mais de um parâmetro do leque de parâmetros exibidos como opções ao operador. Com isto ele pode selecinar 1 elemento, mais de um, todos. Aliás ao setar esta opção um elemento extra é adicionado ao leque de opções que é o 'Selecionar todos' que ao ser clicado seleciona/ desseleciona todos os itens.

Neste tipo de parâmetro você deve fornecer inúmeros valores para criar uma lista suspensa que seus usuários possam escolher.
Essa é uma boa maneira de garantir que apenas valores válidos sejam enviados na consulta do conjunto de dados.
Note que mesmo que forem poucos dados o parâmetro multiple é útil mas é completamente inútil se só houver uma opção ou muitas opções onde o usuário fique cansado de procurar por eles.

Note que ao utilizar esta opção (Allow multiple Values) você terá como retorno ou um dado ou um vetor com um conjunto de dados. Por esse motivo ao usar esta opção você obrigatoriamente deverá utilizar o parâmetro numa cláusula in da sua pesquisa. Embora no SQL isso não faça sentido foi assim que o Report Server foi feito para trabalhar e só assim ele funciona. Caso contrario você sempre terá erro na execução da sua pesquisa. Na depuração a pesquisa funcionará perfeitamente mas na geração do relatório irá falhar sempre.

Aba 'General' - Propriedade: 'Select Paramenter Visibility'

Normalmente os parâmetros são visíveis aos usuários, mas há parâmetros que são obtidos diretamente de pesquisas e não necessitam que o usuário selecione qual porque apenas um resultado é retornado. Sendo assim o parâmetro existe mas como não há interação com o usuário ficaria 'esquisito' exibir ele ao usuário. Até podemos colocar um textobox com o seu valor no relatório, mas normalmente ele só é exibido como parâmetro se o usuário for interagir com ele.

Visible - É o valor default do parâmetro. Isto torna o parâmetro visível ao operador o que possibilita sua interação na escolha do valor correto a ser utilizado no relatório. Note que não tem um escolhido por default, nada vem selecionado. Portanto o usuário deverá selecionar o valor ou dará erro ao pressionar o botão 'View Report' e a mensagem será 'faltou selecionar o parâmetro (nome)'

Hidden - Esta opção esconde o parâmetro do relatório e não permite qualquer interação com o usuário. Portanto ele deverá possuir somente um valor que será utilizado na confecção do relatório.

Selecione esta opção para ocultar o parâmetro do relatório no relatório publicado. Os valores de parâmetro de relatório ainda podem ser definidos em uma URL de relatório, em uma definição de assinatura ou no servidor de relatório.

Internal - Esta opção esconde o parâmetro do relatório, não permite qualquer interação com o usuário e não pode ser preenchido, por exemplo, por uma pesquisa. Tecnicamente chamamos de 'Parâmetro estático', ou seja, a gente define valor(es) para ele no design do relatório. Seria o caso de eu usar um parâmetro na pesquisa mas ao invés de alterar sempre a pesquisa a gente cria um parâmetro que flexibiliza essa alteração.

Aba 'Available Values' - Propriedade: Data type

Valores disponíveis - Esta aba define o leque de opções / os valores disponíveis para a escolha do operador.

Se você especificou valores disponíveis para um parâmetro, os valores válidos sempre aparecem como uma lista suspensa. Por exemplo, se você fornecer valores disponíveis para um parâmetro DateTime, uma lista suspensa de datas aparecerá no painel de parâmetros em vez de um controle de calendário.

Para garantir que uma lista de valores seja consistente entre um relatório e sub-relatórios, você pode definir uma opção na fonte de dados para usar uma única transação para todas as consultas nos conjuntos de dados associados a uma fonte de dados.

Observação de segurança : Em qualquer relatório que inclua um parâmetro do tipo de dados Texto, certifique-se de usar uma lista de valores disponíveis (também conhecida como lista de valores válidos) e certifique-se de que qualquer usuário executando o relatório tenha apenas as permissões necessárias para exibir os dados no relatório. Para obter mais informações, consulte Segurança (Construtor de Relatórios).

Select from one of the following options

Selecionar uma das seguintes opções - Aqui você seleciona como o leque de opções será preenchido pelo report Server.

None - O report Server não irá definir as opções para este parâmetro. Esta opção é utilizada quando, por exemplo, o usuário deve digitar um valor

Specify Values - No desenho do relatório definimos quais as opções disponíveis para o parâmetro. O conjunto das opções do parâmetro é definido estaticamente quando no desenho do relatório. Supondo que você tenha um campo onde o usuário possa escolher os números de 1 a 5..esta seria a melhor opção para esse tipo de parâmetro.

Get Values from a query - Neste caso as opções do parâmetro vem diretamente de uma pesquisa SQL. Note que se a pesquisa retornar muitos valores será cansativo para o operador procurar pelo valor correto. Ao selecionar esta opção as 3 caixas inferiores tornam-se aivas :

Dataset - Aponta para o DataSet que irá gerar as informações para as opções do parâmetro.

Value Field - Especifica dentro do DataSet escolhido na opção acima qual será o campo que definirá o valor do parâmetro que será usado no relatório.

Label Field - Especifica dentro do DataSet escolhido na opção acima qual será o campo que definirá o que será exibido como opção para o parâmetro.

Por exemplo, eu tenho um grupo de empresas...para o usuário fica mais fácil reconhecer pelo nome da empresa (campo Label) mas para o SQL fica mais fácil identificar a empresa pelo id/Código da empresa (campo Value). O usuário escolhe o Label mas o sql recebe o value do campo.

Aba 'Default values''

A aba Valores Default, ou seja, valor escolhido por padrão o que permite que mesmo que o usuário não selecione nada o valor do parâmetro tenha um default e o relatório seja gerado corretamente.

As opções que temos são :

No Default Value - É o padrão e obriga o usuário a escolher um valor para o parâmetro para que o relatório seja gerado.

Specify Values - Neste caso, na criação do relatório é criada uma lista de opções estáticas para o parâmetro, ou seja, o analista define quais são as opções disponíveis para o parâmetro adicionando uma a uma das opções.

Get Values from a query - Esta opção atua como 'Get Values from a query', ou seja, uma pesquisa define os valores disponíveis para o parâmetro. Mas diferentement do 'Get Values from a query' o primeiro parâmetro recebido da pesquisa é o valor default do parâmetro e, mesmo que o usuário não escolha nenhum, o parâmetro default será usado para gerar o relatório.

Aba Advanced

A aba 'Advanced' define quando o parâmetro deve ser atualizado ou a condição que ele deve ser atualizado.

Por definição o Report Server ao exibir o relatório popula todos os parâmetros para que o operador faça suas escolhas. Contudo podemos ter parâmetros que dependem de outras opções ou parâmetros. Sendo assim o operador precisa escolher o parâmetro 1 e a partir dessa escolha é executada uma pesquisa que irá popular o parâmetro 2.

Por exemplo, eu poderia escolher uma comida (café, refeição, sobremesa) e a partir da seleção eu definiria o que há disponível para ela. Por exemplo, no café seria um simples café, leite, pão, manteiga ou um suco, um lanche natural, etc... A partir de uma escolha faremos outra escolha.

O Report Server faz esse 'encadeamento' automaticamente. Sempre que definimos que um relatório depende de um parâmetro ele aguardará que o parâmetro seja definido para executar a pesquisa que trará o novo leque de opções para o parâmetro.

Note que se o parâmetro 'pai' mudar o parâmetro 'filho' será recalculado novamente, sempre.

Automatically determine when to refresh

Determinar automaticamente quando atualizar - Escolha esta opção quando desejar que o processador de relatórios determine quando os valores do parâmetro devem ser calculados/recalculados. Se o parâmetro for independente ele será executado imediatamente. Se for dependente de outro parâmetro o Report Server irá aguardar o operador escolher o parâmetro 'pai' primeiramente para em seguida repopular o parâmetro filho.

Always-Refresh-Atualizar sempre

Escolha esta opção quando o parâmetro deve ser sempre atualizado a cada alteração de qualquer opção do relatório.

Never Refresh - Nunca atualize

Se você carregou um parâmetro com uma lista de valores utilize esta propriedade para informar que esse parâmetro não deve ser atualizado. O Report Server faz isso automaticamente mas essa opção existe para esse motivo.

Cuidado : Use 'Nunca Atualizar' com cuidado. No servidor de relatório, Se você definir Nunca atualizar incorretamente, poderá fazer com que dados ou relatórios incorretos sejam armazenados em cache ou fazer com que um relatório instantâneo tenha dados inconsistentes. Para obter mais informações, consulte Linguagem de Definição de Relatório (SSRS).

Existe um atributo de definição de relatório chamado UsedInQuery que determina se o parâmetro é ou não utilizado em uma pesquisa.